package com.hongyi.web.controller;

import com.hongyi.result.Result;
import com.hongyi.web.dto.SysDeptDto;
import com.hongyi.web.mapper.SysDeptMapper;
import com.hongyi.web.pojo.SysDept;
import com.hongyi.web.query.SysDeptQueryDto;
import com.hongyi.web.service.ISysDeptService;
import com.hongyi.web.utils.PageResult;
import com.hongyi.web.utils.StringUtils;
import com.hongyi.web.vo.SysDeptVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;



/**
 * @Author hongyi
 * @Date 2025/6/24 12:53
 */
@RestController
@RequestMapping("/system/dept")
public class SysDeptController
{
    @Autowired
    private ISysDeptService deptService;

    @Autowired
    private SysDeptMapper deptMapper;

    /**
     * 获取部门列表
     */
    @GetMapping("/selectPage")
    public Result selectPage(SysDeptQueryDto sysDeptQueryDto,
                             @RequestParam(defaultValue = "1")Integer pageNum,
                             @RequestParam(defaultValue = "100")Integer pageSize)
    {
        PageResult<SysDeptVo> depts = deptService.selectPage(sysDeptQueryDto,pageNum,pageSize);
        return Result.success(depts);
    }

    /**
     * 根据部门编号获取详细信息
     */
    @GetMapping(value = "/{deptId}")
    public Result getDeptById(@PathVariable Long deptId)
    {
        SysDeptVo dept = deptService.selectDeptById(deptId);
        return Result.success(dept);
    }

    /**
     * 新增部门
     */
    @PostMapping("/add")
    public Result add(@RequestBody SysDeptDto sysDeptDto)
    {
        if (!checkPostNameUnique(sysDeptDto)) {
            return error2("部门名称已经存在了" + sysDeptDto.getDeptName() + "新增失败");
        }
        deptService.insertDept(sysDeptDto);
        return Result.success("新增数据成功");
    }


    public boolean checkPostNameUnique(SysDeptDto sysDeptDto) {
        Long deptId = StringUtils.isNull(sysDeptDto.getDeptId()) ? -1L : sysDeptDto.getDeptId();
        SysDept info = deptMapper.checkDeptNameUnique(sysDeptDto.getDeptName(), sysDeptDto.getParentId());
        if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
        {
            return false;
        }
        return true;
    }

    /**
     * 修改部门
     */
    @PutMapping("/edit")
    public Result edit(@RequestBody SysDeptDto sysDeptDto)
    {

        if(!checkPostNameUnique(sysDeptDto)) {
            return error2("该部门已经存在" + sysDeptDto.getDeptName() + "修改失败");
        } else if (StringUtils.equals(sysDeptDto.getStatus(), "1") && deptMapper.selectNormalChildrenDeptById(sysDeptDto.getDeptId()) > 0) {
            return error2("该部门包含为停用的子部门！不能进行修改存在子部门");
        }
        deptService.updateDept(sysDeptDto);
        return Result.success("编辑成功");
    }

    public Result error2(String message) {
        return Result.error(message);
    }


    /**
     * 删除部门
     */
    @DeleteMapping("/{deptId}")
    public Result remove(@PathVariable Long deptId)
    {

        if (deptMapper.hasChildByDeptId(deptId) > 0)
        {
            return error2("存在下级部门,不允许删除");
        }
        if (deptMapper.checkDeptExistUser(deptId) > 0) {
            return error2("部门存在用户,不允许删除");
        }
        deptService.deleteDeptById(deptId);
        return Result.success("删除数据成功");
    }
}
